package com.wang.io;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * FileInputStream：用于从磁盘文件中读取数据(byte)到内存中，指针起初指向文件内容的起始位置，后续记录上次读取的末尾位置(防止重复读取)。
 */
public class TestFileInputStream {

    /**
     * 构造方法：
     *   1. new FileInputStream(File file)
     *   2. new FileInputStream(String path)
     * 读取文件数据：
     *   1. read()：读取下一个字节，-1表示文件已经读完。效率较低。
     *   2. read(byte[] buf)：批量读取数据，每次最多读取 buf.length 个字节，返回实际读取的字节数，-1表示文件已经读完。效率较高。
     * 关闭输入流：
     *   1. close()：关闭输入流
     */
    @Test
    public void test01() {
        FileInputStream fileInputStream = null;
        byte[] buf = new byte[10];  // 缓冲数组，用于存放读取的字节
        int readLen = 0;  // 每次实际读取的字节个数
        try {
            fileInputStream = new FileInputStream("e:\\hello.txt");
            while ((readLen = fileInputStream.read(buf)) != -1) {
                System.out.print(new String(buf, 0, readLen));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
